

#ifndef UC_GECBNDRY_H
#define UC_GECBNDRY_H

#include "zgegbl.h"
#pragma pack (push, 8)

class UcGeCurve2d;
class UcGeEntity3d;
class UcGePosition3d;
class UcGeImpCurveBoundary;
     
class 
GX_DLLEXPIMPORT
UcGeCurveBoundary
{
public:
    UcGeCurveBoundary();
    UcGeCurveBoundary(int numberOfCurves, const UcGeEntity3d *const * crv3d,
                      const UcGeCurve2d *const * crv2d,
                      ZSoft::Boolean* orientation3d,
                      ZSoft::Boolean* orientation2d,
                      ZSoft::Boolean makeCopy = ZSoft::kTrue);
    UcGeCurveBoundary(const UcGeCurveBoundary&);

    ~UcGeCurveBoundary();

    UcGeCurveBoundary& operator =   (const UcGeCurveBoundary& src);

    ZSoft::Boolean     isDegenerate () const;
    ZSoft::Boolean     isDegenerate (UcGePosition3d& degenPoint, UcGeCurve2d** paramCurve) const;
    int                numElements  () const;
    void               getContour   (int& n, UcGeEntity3d*** crv3d,
                                     UcGeCurve2d*** paramGeometry,
                                     ZSoft::Boolean** orientation3d,
                                     ZSoft::Boolean** orientation2d) const;

    UcGeCurveBoundary& set (int numElements, const UcGeEntity3d *const * crv3d,
                            const UcGeCurve2d *const * crv2d,
                            ZSoft::Boolean* orientation3d,
                            ZSoft::Boolean* orientation2d,
                            ZSoft::Boolean makeCopy = ZSoft::kTrue);

    ZSoft::Boolean     isOwnerOfCurves() const;
    UcGeCurveBoundary& setToOwnCurves ();

protected:
    friend class UcGeImpCurveBoundary;

    UcGeImpCurveBoundary    *mpImpBnd;
    int                     mDelBnd;
};

#pragma pack (pop)
#endif
